#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "requete.h"
/*
commande : 
GET 	 Requête de la ressource située à l'URL spécifiée
HEAD 	Requête de l'en-tête de la ressource située à l'URL spécifiée
POST 	Envoi de données au programme situé à l'URL spécifiée

En-têtes
Accept-Encoding
Authorization
Content-Encoding
Content-Length
User-Agent
*/

struct requete{
  enum m{pas_methode=-1, get=0, head=1, post=2} methode; 
  char *url;
  enum p {pas_protocole=-1, http0_9=0 ,http1_0=1, http2_0=2} protocole;
  enum e{pas_entete=-1, Accept_Encoding=0, Authorization=1, Content_Encoding=2, Content_Length=3, User_Agent=4} entete;

};

void
test(char *lol)
{
  char *s=lol;
  printf("%s\n",s);
}

requete
creer_requete(int taille_url)
{
  requete self=malloc(sizeof(*self));

  self->methode=pas_methode;
  self->protocole=pas_protocole;
  self->entete=pas_entete;
  self->url=malloc( taille_url*sizeof(char*));

  return self;
}

requete
extraire_info(char* requete_recue)
{

  char *methode, *methode_cpy, *url, *url_cpy, *protocole, *protocole_cpy;
  //Les tailles sont initialisées à 1 pour laisser la place au caractère '\0'
  int taille_methode=1, taille_url=1, taille_protocole=1;
  
  char *requete_recue_cpy=requete_recue;

  for(; *requete_recue_cpy!=' ';*requete_recue_cpy++, taille_methode++)
    ;
 
  methode=malloc(taille_methode*sizeof(char));
  methode_cpy=methode;

  for(; *requete_recue!=' '; requete_recue++, methode_cpy++)
    *methode_cpy=*requete_recue;
  requete_recue++;
  methode_cpy++;
  *methode_cpy='\0';

  requete_recue_cpy=requete_recue;
  for(; *requete_recue_cpy!=' '; requete_recue_cpy++, taille_url++);
  
  url=malloc(taille_url*sizeof(char));
  url_cpy=url;
  
  for(; *requete_recue!=' '; requete_recue++,url_cpy++)
    *url_cpy=*requete_recue;
  requete_recue++;
  url_cpy++;
  *url_cpy='\0';

  //protocole
  requete result = creer_requete(taille_url);
  
  if(strcmp(methode,"GET")==0)
     result->methode= get;

  if(strcmp(methode,"HEAD")==0)
     result->methode= head;

  if(strcmp(methode,"POST")==0)
     result->methode= post;

  strcpy(result->url,url);
  return result;
  }

void
afficher_requete(requete r)
{
  printf("methode:\t %d\n",r->methode);
  printf("url:\t\t%s\n",r->url);
  printf("protocole:\t %d\n",r->protocole);
  printf("en tete:\t %d\n\n",r->entete);
}
int
main(int argc,char* argv[])
{

  char *req ="GET dossier/sousDossier/testlol HTTP/1.0\nAccept : text/html\nIf-Modified-Since : Saturday, 15-January-2000 14:37:11 GMT\nUser-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)";

  //test(req);
  requete r =extraire_info(req);
  afficher_requete(r);
  // printf("%d\n", strlen("///"));
 
  return EXIT_SUCCESS;
}
